//编程范式：命令式编程/声明式编程
//编程范式：面向对象编程(第一公民:对象)/函数式编程(第一公民:函数)
//filter/map/reduce
//filter中的回调函数有一个要求：必须返回一个boolean值
//true:当返回为true时，函数内部会自动将这次回调的n加入到新的数组中
//false:当返回为false时，函数内部会过滤掉这次的n
const nums = [10, 20, 111, 222, 444, 40, 50]

let total = nums.filter(n => n < 100).map(n => n * 2).reduce((pre, n) => pre + n)
console.log(total)



// let total = nums.filter(function (n) {
//     return n < 100
// }).map(function (n) {
//     return n * 2
// }).reduce(function (preValue, n) {
//     return preValue + n
// }, 0)
// console.log(total)



// //1.filter函数的使用
// //10, 20, 40, 50
// let newNums = nums.filter(function (n) {//n为每一项
//     return n < 100
// })
// console.log(newNums)

// //2.map函数的使用
// let new2Nums = newNums.map(function (n) {
//     return n * 2
// })
// console.log(new2Nums)

// //3.reduce函数的使用
// //reduce作用对数组中所有的内容进行汇总
// //preValue为上一次返回的值
// let total = new2Nums.reduce(function (preValue, n) {
//     return preValue + n
// }, 0)
// console.log(total)
// //第一次：preValue:0, n:20
// //第二次：preValue:20, n:40
// //第三次：preValue:60, n:80
// //第四次：preValue:140, n:100



// //1.需求：取出所有小于100的数字
// let newNums = []
// for (let n of nums) {
//     if (n < 100) {
//         newNums.push(n)
//     }
// }

// //2.讲所有小于100的数字进行转化：全部*2
// let new2Nums = []
// for (let n of newNums) {
//     new2Nums.push(n * 2)
// }
// console.log(new2Nums)

// //3.需求：讲所有new2Nums数字相加，得到最终的结果
// let total = 0
// for (let n of new2Nums) {
//     total += n
// }
// console.log(total)